package rai;

import java.io.IOException;

import rai.model.Personne;
import rai.service.rep.Repertoire;
import rai.service.transport.Client;

public class RaiClientRepertoire implements Repertoire {
	Client leClient;

	public RaiClientRepertoire(Client leClient) {
		super();
		this.leClient = leClient;
	}

	public RaiClientRepertoire(String hostname) throws IOException {
		this.leClient = new Client(hostname);
	}

	

	public boolean ajouterPersonne(Personne personne) {
		try {
			this.leClient.writeObject(Commande.AddPersonne);
			this.leClient.writeObject(personne);
			return this.leClient.readBoolean();
		} catch (IOException e) {
			new RuntimeException("Erreur E/S");
			e.printStackTrace();
		}
		return false;
	}

	public Personne chercherPersonne(String nom) {
		try {
			this.leClient.writeObject(Commande.FindPersonne);
			this.leClient.writeString(nom);
			return (Personne) this.leClient.readObject();
		} catch (IOException e) {
			new RuntimeException("Erreur E/S");
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			new RuntimeException("Erreur Class inconnue");
			e.printStackTrace();
		}
		return null;
	}

	public String[] listerPersonnes() {
		try {
			String[] sortie;
			this.leClient.writeObject(Commande.ListePersonnes);
			int nbNom = this.leClient.readInt();
			sortie = new String[nbNom];
			for (int i = 0; i < nbNom; i++)
				sortie[i] = this.leClient.readString();
			return sortie;
		} catch (IOException e) {
			new RuntimeException("Erreur E/S");
			e.printStackTrace();
		}
		return null;
	}

	public boolean modifierPersonne(Personne personne) {
		try {
			this.leClient.writeObject(Commande.UpgPersonne);
			this.leClient.writeObject(personne);
			return this.leClient.readBoolean();
		} catch (IOException e) {
			new RuntimeException("Erreur E/S");
			e.printStackTrace();
		}

		return false;
	}

	public boolean retirerPersonne(String nom) {
		try {
			this.leClient.writeObject(Commande.RemPersonne);
			this.leClient.writeString(nom);
			return this.leClient.readBoolean();
		} catch (IOException e) {
			new RuntimeException("Erreur E/S");
			e.printStackTrace();
		}
		return false;
	}

}
